#ifndef __GATTS_RC522_INTERNAL__
#define __GATTS_RC522_INTERNAL__

#include <stdio.h>
#include <stdbool.h>
#include <string.h>

#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "nvs_flash.h"
#include "esp_err.h"
#include "esp_log.h"

#include "gatts.h"
#include "rc522.h"

#define uuid16(x)                               \
	{                                       \
		.bit_len = 16, .uuid.uuid16 = x \
	}

#define LEN(x) sizeof(x) / sizeof(x[0])

enum { CONF_LEN = 14, ID_LEN = 7, DATA_LEN = 16, STAT_LEN = 2 };

enum { NFC_CONF, NFC_ID, NFC_DATA, NFC_STAT };

/**
 * @brief 获取nfc模式
 * @param nfc_conf 
 * @return 0：扫描模式，1：写入模式，2：读取模式
 */
uint8_t get_nfc_mode(const uint8_t nfc_conf[CONF_LEN]);

/**
 * @brief 获取nfc挂起状态
 * @param nfc_conf 
 * @return 挂起状态返回true，运行状态返回false
 */
bool get_nfc_suspended(const uint8_t nfc_conf[CONF_LEN]);

/**
 * @brief 获取nfc使能状态
 * @param nfc_conf 
 * @return 使能状态返回true，禁用状态返回false
 */
bool get_nfc_enabled(const uint8_t nfc_conf[CONF_LEN]);

/**
 * @brief 设置nfc为挂起状态
 * @param nfc_conf 
 * @return void
 */
void set_nfc_suspend(uint8_t nfc_conf[CONF_LEN]);

/**
 * @brief 设置nfc为活动状态
 * @param nfc_conf 
 * @return void
 */
void set_nfc_active(uint8_t nfc_conf[CONF_LEN]);

/**
 * @brief 设置nfc使能
 * @param nfc_conf 
 * @return void
 */
void set_nfc_enable(uint8_t nfc_conf[CONF_LEN]);

/**
 * @brief 设置nfc禁用
 * @param nfc_conf 
 * @return void
 */
void set_nfc_disable(uint8_t nfc_conf[CONF_LEN]);

/**
 * @brief 设置nfc为扫描模式
 * @param nfc_conf 
 * @return void
 */
void set_nfc_scan_mode(uint8_t nfc_conf[CONF_LEN]);

/**
 * @brief 设置nfc为读取模式
 * @param nfc_conf 
 * @return void
 */
void set_nfc_read_mode(uint8_t nfc_conf[CONF_LEN]);

/**
 * @brief 设置nfc为写入模式
 * @param nfc_conf 
 * @return void
 */
void set_nfc_write_mode(uint8_t nfc_conf[CONF_LEN]);

void rc522_task(void *arg);

#endif